package com.mixsmart.web.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.mixsmart.commonweb.bean.entity.TCRole;
import com.mixsmart.commonweb.service.IRoleService;
import com.mixsmart.core.bean.MixResponse;
import com.mixsmart.utils.StringUtils;
import com.mixsmart.web.bean.SubmitDataBean;
import com.mixsmart.web.plugins.bean.ZTreeData;

/**
 * 角色管理--控制类
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * <p>2016年5月16日</p>
 */
@Controller
@RequestMapping("/role")
public class RoleController extends BaseWebController {

	private static final String VIEW_DIR = WEB_BASE_VIEW_DIR+"/role/";
	
	@Autowired
	private IRoleService roleServ;
	
	/**
	 * 添加角色视图页面
	 * @return 返回添加角色视图页面
	 */
	@RequestMapping("/add.do")
	public ModelAndView add() {
		ModelAndView modelView = new ModelAndView();
		modelView.getModelMap().put("roleId", "0");
		modelView.setViewName(VIEW_DIR+"add");
		return modelView;
	}
	
	/**
	 * 保存角色数据
	 * @param session HttSeesion对象
	 * @param role 角色实体
	 * @param menuId 菜单ID数组
	 * @param submitBean 用于提交资源树
	 * @return 返回MixResponse对象（即：操作结果，以JSON格式的形式返回数据）；
	 * 如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping(value="/save.do", method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<TCRole> save(HttpSession session, TCRole role, String[] menuId, SubmitDataBean submitBean) {
		MixResponse<TCRole> mixResp = new MixResponse<TCRole>();
		mixResp.setMsg("角色添加失败");
		if(null != role) {
			role.setUserId(getUserInfoFromSession(session).getUserId());
			if(roleServ.save(role, menuId, submitBean.getTreeProps())) {
				mixResp.setResult(OP_SUCCESS);
				mixResp.setData(role);
				mixResp.setMsg("角色添加成功");
			}
		}
		return mixResp;
	}
	
	/**
	 * 编辑角色视图页面
	 * @param session HttpSession对象
	 * @param id 角色ID
	 * @return 返回编辑角色视图
	 */
	@RequestMapping("/edit.do")
	public ModelAndView edit(HttpSession session, String id) {
		ModelAndView modelView = new ModelAndView();
		if(StringUtils.isNotEmpty(id)) {
			modelView.getModelMap().put("objBean", roleServ.find(id));
		}
		modelView.setViewName(VIEW_DIR+"edit");
		return modelView;
	}
	
	/**
	 * 修改角色
	 * @param session HttSeesion对象
	 * @param role 角色实体
	 * @return 返回MixResponse对象（即：操作结果，以JSON格式的形式返回数据）；
	 * 如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping(value="/update.do", method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<TCRole> update(HttpSession session, TCRole role, String[] menuId, SubmitDataBean submitBean) {
		MixResponse<TCRole> mixResp = new MixResponse<TCRole>();
		mixResp.setMsg("角色修改失败");
		if(null != role && StringUtils.isNotEmpty(role.getId())) {
			if(roleServ.update(role, menuId, submitBean.getTreeProps())) {
				mixResp.setResult(OP_SUCCESS);
				mixResp.setData(role);
				mixResp.setMsg("角色修改成功");
			}
		}
		return mixResp;
	}
	
	/**
	 * 删除角色
	 * @param id 角色ID；多个ID之间用英文逗号“,”分隔
	 * @return 返回MixResponse对象（即：操作结果，以JSON格式的形式返回数据）；
	 * 如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping(value="/delete.do", method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> delete(String id) {
		MixResponse<String> mixResp = new MixResponse<String>();
		mixResp.setMsg("角色删除失败");
		if(StringUtils.isNotEmpty(id)) {
			if(roleServ.delete(id)) {
				mixResp.setResult(OP_SUCCESS);
				mixResp.setMsg("角色删除成功");
			}
		}
		return mixResp;
	}
	
	/**
	 * 查看角色分配的URL资源
	 * @param id 角色ID
	 * @return 返回MixResponse对象（即：操作结果，以JSON格式的形式返回数据）；
	 * 如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping("/viewUrlRes.do")
	@ResponseBody
	public MixResponse<ZTreeData> viewUrlRes(String id) {
		MixResponse<ZTreeData> mixResp = new MixResponse<ZTreeData>();
		
		return mixResp;
	}
}
